package com.UnionPayCenter.service;

import com.UnionPayCenter.entity.CouponDeliverRecords;
import com.UnionPayCenter.entity.CouponEntity;
import com.UnionPayCenter.entity.CouponUseRecords;
import com.UnionPayCenter.entity.GiveCouponEntity;
import com.UnionPayCenter.entity.vo.CardInfoVo;
import com.UnionPayCenter.entity.vo.ExpiringUserCouponVo;
import com.UnionPayCenter.entity.vo.UserCouponVo;
import com.UnionPayCenter.request.PutToUserConditionRequest;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import java.io.IOException;
import java.util.List;

public interface ICouponService {

    /**
     * @param jsonParam
     * @return
     * @Description: 查询优惠券列表
     */
    PageInfo<CouponEntity> findList(JSONObject jsonParam);

    /**
     * @param jsonParam
     * @return
     * @Description: 添加优惠券
     */
    boolean add(JSONObject jsonParam);

    /**
     * @param jsonParam
     * @return
     * @Decription: 查询优惠券详情
     */
    CouponEntity findCouponInfo(JSONObject jsonParam);

    /**
     * @param jsonParam
     * @return
     * @Description: 编辑优惠券
     */
    boolean update(JSONObject jsonParam);

    /**
     * 更新优惠券用户id
     *
     * @param couponsId 优惠券id
     * @param userId    用户Id
     * @return
     */
    void updateUserId(Long userId, String couponsId);

    /**
     * @param jsonParam
     * @return
     * @Description: 查询用户优惠券列表
     */
    PageInfo<UserCouponVo> findUserCouponList(JSONObject jsonParam);

    /**
     * @param jsonParam
     * @return
     * @Description: 投放优惠券
     */
    String putToUser(JSONObject jsonParam);

    /**
     * @param putToUserConditionRequest 投放条件
     * @param shopId                    店铺id
     * @param managerId                 管理id
     * @return
     * @Description: 投放优惠券
     */
    String putToConditionUser(PutToUserConditionRequest putToUserConditionRequest, Integer shopId, Integer managerId);

    /**
     * @param shopId
     * @param mobile
     * @param disTypeId
     * @param count
     * @param effectiveNextDay (1-次日生效;0-即刻生效)
     * @Description: 插入用户优惠券信息
     */
    void insertUserCoupon(Integer shopId, String mobile, Integer disTypeId, Integer count, Integer effectiveNextDay);

    /**
     * @param shopId
     * @param userId
     * @param disTypeId
     * @param count
     * @param effectiveNextDay (1-次日生效;0-即刻生效)
     * @Description: 插入用户优惠券信息
     */
    void insertUserCouponByUserId(Integer shopId, Integer userId, Integer disTypeId, Integer count, Integer effectiveNextDay);

    /**
     * @param jsonParam
     * @return
     * @Description: app端查询用户优惠券列表
     */
    PageInfo<UserCouponVo> getUserCouponList(JSONObject jsonParam);

    /**
     * @param userId
     * @return
     * @Description: 查询指定用户的会员卡信息
     */
    CardInfoVo getCardInfoByUserId(Integer userId);

    /**
     * @param cardId
     * @return
     * @Description: 根据会员卡号查询会员卡信息
     */
    CardInfoVo getCardInfoByCardId(String cardId);

    /**
     * @param userId
     * @param disId
     * @return
     * @Description: 消费指定优惠券
     */
    boolean consumptionCoupon(Integer userId, String disId);

    /**
     * @param userId
     * @param disId
     * @return
     * @Description: 根据优惠券id查询优惠券信息
     */
    UserCouponVo getUserCouponByDisId(Integer userId, String disId);

    /**
     * @param userId
     * @param shopId
     * @param status (00可使用、01已使用、02过期)
     * @return
     * @Description: 查询用户优惠券数量
     */
    int getUserCouponCount(Integer userId, Integer shopId, String status);

    /**
     * @param jsonParam
     * @return
     * @Description: 查询优惠券投放记录
     */
    PageInfo<CouponDeliverRecords> findCouponDeliverRecords(JSONObject jsonParam);

    /**
     * @param jsonParam
     * @return
     * @throws IOException
     * @Description: 导出优惠券投放记录
     */
    String exportDeliverRecords(JSONObject jsonParam) throws IOException;

    /**
     * @param jsonParam
     * @return
     * @Description: 查询优惠券使用记录
     */
    PageInfo<CouponUseRecords> findCouponUseRecords(JSONObject jsonParam);

    /**
     * @param jsonParam
     * @return
     * @throws IOException
     * @Description: 导出优惠券使用记录
     */
    String exportUseRecords(JSONObject jsonParam) throws IOException;


    /**
     * 根据优惠券ID获取优惠券信息
     *
     * @param disTypeId
     * @return
     */
    CouponEntity getCouponMapperByTypeId(Long disTypeId);
    
    /**
     * 查询三天内将要过期的用户优惠券数量
     * 
     * @param expireDate
     * @return
     */
    List<ExpiringUserCouponVo> getExpiringUserCoupon(String expireDate);

}
